In medium- and large-scale software development, it often happens that a team comprising a number of people, having different skill sets and responsibilities, need to collaborate to successfully develop and deliver a software product. This team can include programmers and engineers, database developers, software architects, build mangers, requirements analysts, and project managers.
In order to successfully develop software, many different types of data objects (called “development artifacts”) must be created, maintained, and modified by the various members of the software development team. These data objects can include files and directories on computer systems, database file stores, source code files, files describing software models, requirements analysis documents, detailed technical specifications, and the like. During the software development process, these artifacts are subject to constant change and modification. For example, a source code file in a source code repository will be expanded, modified, created or even deleted by a programmer. Another example is that of a requirements document, which can be modified by a requirements analyst based on new information from a customer or a marketing professional. Often, a member of the team will need to be made aware of the modification of an artifact by another member of team. For example, a programmer will need to know when a key software specification document has been modified to include a new feature, so that the programmer can update some of the source code to implement that feature. In another example, a build manager, who is responsible for building and configuring executables for the software under development will need to know when new modules of source code have been added to the source code repository, so that he or she can modify the build process to include the new modules. Finally, a software architect, using a modeling tool, may update the definitions of class hierarchies being used in a project—a programmer may wish to know of this modification to allow him or her to modify some piece of source code to use the new interfaces available in the modified class hierarchies.
In addition to creation, deletion, and modification of development artifacts, there are many other events that various members of a team may wish to become aware of. For example, a software quality assurance tester may wish to know when a build process, possibly initiated by a build manager, has completed so that the tester can begin testing the latest version of the software.
In former times, the need for various members of a software development team to be quickly aware of artifact modification and other events was less, because of the segmented nature of the software development process in which ideally, for example, a requirements document would be completed and unlikely to be modified while engineers and programmers implemented the software specified therein. In modern “agile” software development processes, the workflow interrelating the various stages and procedures on the software development process is much more complex and organic. Therefore, a timely flow of information about the changes occurring in development artifacts (which are the physical representations of the workflow of the development process) as well as the occurrence of other significant events in the development process is crucial for effective and efficient collaboration among the team members. In addition, it is now often the case the members of the team are distributed around the world and that geographical distribution, coupled with the sheer complexity of modern software engineering projects can make it difficult for team members to keep one another apprised of the modifications and events using the conventional expedients of in-person discussions, phone calls, or even email. There is now a great need for automated processes to mediate the timely flow of information about changes in development artifacts and other related events.
DRAWINGS - Reference numerals101event producer102message containing event descriptors transmitted by event producer103message containing event descriptors transmitted by subscriptionmodule104subscriber105subscription message106producer subscription message107event message transmitted by event producer108event message transmitted by notification module109notification module110event consumer111notification module subscription message112subscription module201network202main bus of machine to implement subscription module203memory containing processor-executable programs204network interface205processor206machine implementing subscription module207processor-executable programs208main bus for machine implementing event producer209network interface of machine to implement event producer210processor of machine to implement event producer211memory containing processor-executable programs for machine toimplement event producer212machine to implement event producer213machine to implement notification module214network interface of machine to implement event producer215processor of machine to implement event producer216memory of machine to implement event producer301subscriber timeline302subscription module timeline303timeline of event producer304notification module timeline305event consumer timeline306message containing plurality of available event descriptors transmitted to subscription module307message containing plurality of available event descriptors transmitted to subscriber308subscription message309producer subscription message310notification module subscription message311event message transmitted from event producer to notification module312event message transmitted from notification module to event consumer